import dayjs from 'dayjs'
import 'dayjs/locale/zh-cn'
import relativeTime from 'dayjs/plugin/relativeTime'
import weekOfYear from 'dayjs/plugin/weekOfYear'
import isBetween from 'dayjs/plugin/isBetween'

// 设置语言为中文
dayjs.locale('zh-cn')

// 使用插件
dayjs.extend(relativeTime)
dayjs.extend(weekOfYear)
dayjs.extend(isBetween)

// 标准日期格式化
export function formatDate(date, format = 'YYYY-MM-DD') {
  if (!date) return '--'
  return dayjs(date).format(format)
}

// 日期时间格式化
export function formatDateTime(date, format = 'YYYY-MM-DD HH:mm:ss') {
  if (!date) return '--'
  return dayjs(date).format(format)
}

// 相对时间 (如：3小时前)
export function formatRelativeTime(date) {
  if (!date) return '--'
  return dayjs(date).fromNow()
}

// 计算年龄
export function calculateAge(birthDate) {
  if (!birthDate) return '--'
  return dayjs().diff(dayjs(birthDate), 'year')
}

// 检查日期是否在某个范围内
export function isDateInRange(date, startDate, endDate) {
  if (!date || !startDate || !endDate) return false
  return dayjs(date).isBetween(dayjs(startDate), dayjs(endDate), null, '[]')
}

// 获取当天开始时间
export function getDayStart(date = null) {
  return dayjs(date || new Date()).startOf('day').toDate()
}

// 获取当天结束时间
export function getDayEnd(date = null) {
  return dayjs(date || new Date()).endOf('day').toDate()
}

// 获取本周开始时间（周一）
export function getWeekStart(date = null) {
  return dayjs(date || new Date()).startOf('week').add(1, 'day').toDate()
}

// 获取本周结束时间（周日）
export function getWeekEnd(date = null) {
  return dayjs(date || new Date()).endOf('week').add(1, 'day').toDate()
}

// 获取本月开始时间
export function getMonthStart(date = null) {
  return dayjs(date || new Date()).startOf('month').toDate()
}

// 获取本月结束时间
export function getMonthEnd(date = null) {
  return dayjs(date || new Date()).endOf('month').toDate()
}

// 获取本年开始时间
export function getYearStart(date = null) {
  return dayjs(date || new Date()).startOf('year').toDate()
}

// 获取本年结束时间
export function getYearEnd(date = null) {
  return dayjs(date || new Date()).endOf('year').toDate()
}

export default {
  formatDate,
  formatDateTime,
  formatRelativeTime,
  calculateAge,
  isDateInRange,
  getDayStart,
  getDayEnd,
  getWeekStart,
  getWeekEnd,
  getMonthStart,
  getMonthEnd,
  getYearStart,
  getYearEnd
} 